package com.gitee.zhanyao.itext.util;

import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.layout.Canvas;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Text;
import lombok.extern.slf4j.Slf4j;

/**
 * @author zhanyao
 */
@Slf4j
public class PdfTextUtil {

    private PdfTextUtil() {
    }

    /**
     * 在指定位置添加文本，文本不换行，超出页面大小自动截取
     *
     * @param source   源文件路径
     * @param target   目标文件路径
     * @param pageNum  页码
     * @param value    文本内容
     * @param fontSize 字体大小
     * @param x        X坐标
     * @param y        Y坐标
     */
    public static void addText(String source, String target, int pageNum, String value, float fontSize, float x, float y) {
        float width = fontSize * value.length();
        addText(source, target, pageNum, value, fontSize, x, y, width, fontSize);
    }

    /**
     * 在指定位置添加文本，在宽度内自动换行，超出高度内容将被截取
     *
     * @param source   源文件路径
     * @param target   目标文件路径
     * @param pageNum  页码
     * @param value    文本内容
     * @param fontSize 字体大小
     * @param x        X坐标
     * @param y        Y坐标
     * @param width    宽度
     * @param height   高度
     */
    public static void addText(String source, String target, int pageNum, String value, float fontSize,
            float x, float y, float width, float height) {
        try (PdfDocument pdfDocument = new PdfDocument(new PdfReader(source), new PdfWriter(target))) {
            PdfPage pdfPage = pdfDocument.getPage(pageNum);
            PdfCanvas pdfCanvas = new PdfCanvas(pdfPage);
            PdfFont pdfFont = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H");
            Text text = new Text(value);
            Paragraph paragraph = new Paragraph(text).setFontSize(fontSize).setFont(pdfFont);
            Rectangle rectangle = new Rectangle(x, y, width, height);
            Canvas canvas = new Canvas(pdfCanvas, rectangle);
            canvas.add(paragraph);
        } catch (Exception e) {
            log.info(e.getMessage(), e);
        }
    }

}
